package algoWing42.modelo;

public class AvionJugador extends Avion {
	/**
	 * 
	 */
	private static final long serialVersionUID = -675783498963020983L;
	int torpedos;
	int cohetes;
	int score;

	public static final int RADIO_JUGADOR = 25;
	public static final int ENERGIA_JUGADOR = 25;

	public AvionJugador(int posX, int posY) {
		super(posX, posY, RADIO_JUGADOR);// /radio anterior 15
		this.torpedos = 0;
		this.cohetes = 0;
		this.score = 0;
		this.energia = ENERGIA_JUGADOR;

	}

	@Override
	public void colisionCon(ObjetoDinamico objeto) {
		objeto.colisionConJugador(this);
	}

	public int getTorpedos() {
		return this.torpedos;
	}

	protected void restarEnergia(int cantidad) {
		energia = energia - cantidad;

		if (energia > 25) {
			energia = 25;
		}
		if (energia <= 0) {
			this.destruir();
		}
	}

	/**
	 * Metodo de dispatch versus Item de Energia.
	 */
	public void colisionConEnergia(Item energia) {
		this.restarEnergia(energia.getCantidad());
	}
	
	/**
	 * Metodo de dispatch versus otro avion. No hace nada con el parametro.
	 */
	public void colisionConAvion(Avion unAvion) {
		this.destruir();
	}

	/**
	 * Metodo de dispatch versus Pack de Armamento.
	 * 
	 * @param cantidad
	 */
	public void colisionConPackDeArmamento(Item pack) {
		this.adquirirCohetes(pack.getCantidad());
		this.adquirirTorpedos(pack.getCantidad());
	}
	
	public void colisionConTorpedoAdaptable(TorpedoAdaptable torpedo) {
		this.score = this.score/2;
		this.restarEnergia(torpedo.getDanio());
	}

	protected void adquirirTorpedos(int cantidad) {
		this.torpedos = this.torpedos + cantidad;
	}

	protected void adquirirCohetes(int cantidad) {
		this.cohetes = this.cohetes + cantidad;
	}

	public int getScore() {
		return this.score;
	}

	public void dispararLaser() {
		if (!this.estaMuerto()) {
			Laser disparo = new Laser(this.getArea().getPosicion(), true);
			Juego.singleton().agregarDisparoJugador(disparo);
		}
	}

	/**
	 * Metodo de testeo.
	 */
	public void moverADerecha() {
		this.moverEnDireccion(1, 0);
	}

	/**
	 * Metodo de testeo.
	 */
	public void moverAIzquierda() {
		this.moverEnDireccion(-1, 0);
	}

	public void sumarAScore(int nro) {
		this.score = this.score + nro;
	}

	public int getCohetes() {
		return this.cohetes;
	}

	public void dispararTorpedo() {
		if (!this.estaMuerto()) {
			if (this.getTorpedos() > 0) {
				Torpedo temp = new Torpedo(this.getArea().getPosicion(), true);
				Juego.singleton().agregarDisparoJugador(temp);
				this.torpedos = this.torpedos - 1;
			}
		}
	}

	public void dispararCohete() {
		if (!this.estaMuerto()) {
			if (this.getCohetes() > 0) {
				Cohete temp = new Cohete(this.getArea().getPosicion(), true);
				Juego.singleton().agregarDisparoJugador(temp);
				this.cohetes = this.cohetes - 1;
			}
		}
	}	

	public void moverEnX(int x) {
		if (x > 0) {
			if (this.getX() <= Juego.ANCHO) {
				this.moverEnDireccion(x, 0);
			}
		} else if (x < 0) {
			if (this.getX() != 0) {
				this.moverEnDireccion(x, 0);
			}
		}
	}

	public void moverEnY(int y) {
		if (y > 0) {
			if (this.getY() <= Juego.LARGO) {
				this.moverEnDireccion(0, y);
			}
		} else if (y < 0) {
			if (this.getY() != 0) {
				this.moverEnDireccion(0, y);
			}
		}
	}
}
